package db

import (
	"easyblog/models"
	"fmt"
	beego "github.com/beego/beego/v2/server/web"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/schema"
	"time"
)

var (
	Db          *gorm.DB
	mysqluser,_   = beego.AppConfig.String("mysqluser")
	mysqlpwd,_    = beego.AppConfig.String("mysqlpwd")
	mysqlhost,_   = beego.AppConfig.String("mysqlhost")
	mysqlport,_   = beego.AppConfig.String("mysqlport")
	mysqldbname,_ = beego.AppConfig.String("mysqldbname")
)

func init(){

	dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&parseTime=True&loc=Local",
		mysqluser,
		mysqlpwd,
		mysqlhost,
		mysqlport,
		mysqldbname)

	var err error
	Db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
		DisableForeignKeyConstraintWhenMigrating: true, // 迁移时禁用外键约束
		SkipDefaultTransaction:                   true, // 禁用默认事务（提高运行速度）
		NamingStrategy: schema.NamingStrategy{
			SingularTable: true, // 使用单数表名
		},
	})

	if err != nil {
		panic("数据库连接失败！")
	}
	Db.AutoMigrate(
		&models.Article{},
		&models.Category{},
		&models.About{},
		&models.FriendLink{},
		&models.Website{},
		&models.Tag{},
		&models.User{})

	sqlDB, _ := Db.DB()
	sqlDB.SetMaxIdleConns(10) // SetMaxIdleConns 设置空闲连接池中连接的最大数量
	sqlDB.SetMaxOpenConns(100) // SetMaxOpenConns 设置打开数据库连接的最大数量。
	sqlDB.SetConnMaxLifetime(time.Hour) // SetConnMaxLifetime 设置了连接可复用的最大时间。
}